package com.tensquare.web.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @description
 * @author: xu1
 **/
//网关过滤器
// 只是 处理下 经过网关头信息丢失的情况   面向user的
// 这不作  jwt解析校验， 头里有什么  转发什么，      把头信息仅需向下传递

// 经过了网关过滤器后，head 头信息 会丢失
// 因此要在 过网关 过滤器的时候 进行 取出来再次转发

@Component
public class WebFilter extends ZuulFilter {

    //返回值就是 设置
    //在请求前pre 或请求后 post 执行
    @Override
    public String filterType() {
        return "pre";
    }

    //多个过滤器的时候的 执行顺序，数字越小，表示越先执行
    @Override
    public int filterOrder() {
        return 0;
    }

    //当前过滤器是否开启
    //true 表示开启
    @Override
    public boolean shouldFilter() {
        return true;
    }

    //过滤器内执行的操作
    //return 任何object的值 都表示继续 执行， 执行跟放行不一样
    //setsendzullresponse(false)表示不再执行
    @Override
    public Object run() throws ZuulException {
        System.out.println("进过前台过滤器了");
        //得到request上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        //得到request域
        HttpServletRequest request = currentContext.getRequest();
        //得到头信息
        String header = request.getHeader("Authorization");
        //判断头信息
        if(header!=null&&!"".equals(header)){
            //传递头信息！！！！！！！！！！！！
            currentContext.addZuulRequestHeader("Authorization",header);
        }

        return null;//继续往下执行
    }

}
